home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / system-config-printer / PhysicalDevice.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-10-12  |  4.9 KB  |  145 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from gettext import gettext as _
  5. import cupshelpers
  6.  
  7. class PhysicalDevice:
  8.     
  9.     def __init__(self, device):
  10.         self.devices = None
  11.         self.add_device(device)
  12.         self._user_data = { }
  13.  
  14.     
  15.     def _canonical_id(self, device):
  16.         mfg = device.id_dict.get('MFG', '')
  17.         mdl = device.id_dict.get('MDL', '')
  18.         if mfg == '' or mdl.lower().startswith(mfg.lower()):
  19.             make_and_model = mdl
  20.         else:
  21.             make_and_model = '%s %s' % (mfg, mdl)
  22.         return cupshelpers.ppds.ppdMakeModelSplit(make_and_model)
  23.  
  24.     
  25.     def add_device(self, device):
  26.         (mfg, mdl) = self._canonical_id(device)
  27.         if self.devices == None:
  28.             self.mfg = mfg
  29.             self.mdl = mdl
  30.             self.mfg_lower = mfg.lower()
  31.             self.mdl_lower = mdl.lower()
  32.             self.sn = device.id_dict.get('SN', '')
  33.             self.devices = []
  34.         else:
  35.             
  36.             def nicest(a, b):
  37.                 
  38.                 def count_lower(s):
  39.                     l = s.lower()
  40.                     n = 0
  41.                     for i in xrange(len(s)):
  42.                         if l[i] != s[i]:
  43.                             n += 1
  44.                             continue
  45.                     
  46.                     return n
  47.  
  48.                 if count_lower(b) < count_lower(a):
  49.                     return b
  50.                 return a
  51.  
  52.             self.mfg = nicest(self.mfg, mfg)
  53.             self.mdl = nicest(self.mdl, mdl)
  54.             sn = device.id_dict.get('SN', '')
  55.             if sn != '' and self.sn != '' and sn != self.sn:
  56.                 raise RuntimeError
  57.             sn != self.sn
  58.         self.devices.append(device)
  59.         self.devices.sort()
  60.  
  61.     
  62.     def get_devices(self):
  63.         return self.devices
  64.  
  65.     
  66.     def get_info(self):
  67.         if (self.mfg == '' or self.mfg == 'HP') and self.mdl == 'Fax':
  68.             return self.devices[0].info
  69.         info = '%s %s' % (self.mfg, self.mdl)
  70.         if len(self.sn) > 0:
  71.             info += ' (%s)' % self.sn
  72.         
  73.         return info
  74.  
  75.     
  76.     def set_data(self, key, value):
  77.         self._user_data[key] = value
  78.  
  79.     
  80.     def get_data(self, key):
  81.         return self._user_data.get(key)
  82.  
  83.     
  84.     def __str__(self):
  85.         return '(description: %s)' % self.__repr__()
  86.  
  87.     
  88.     def __repr__(self):
  89.         return '<PhysicalDevice.PhysicalDevice (%s,%s,%s)>' % (self.mfg, self.mdl, self.sn)
  90.  
  91.     
  92.     def __cmp__(self, other):
  93.         if other == None or type(other) != type(self):
  94.             return 1
  95.         if (other.mfg == '' or other.mdl == '' or self.mfg == '') and self.mdl == '':
  96.             if other.mfg == '' and other.mdl == '' and self.mfg == '' and self.mdl == '':
  97.                 return cmp(self.devices[0], other.devices[0])
  98.             if other.mfg == '' and other.mdl == '':
  99.                 return -1
  100.             return 1
  101.         (our_mfg, our_mdl) = cupshelpers.ppds.ppdMakeModelSplit(our_make_and_model)
  102.         if other.mfg == '' or other.mdl.lower().startswith(other.mfg.lower()):
  103.             other_make_and_model = other.mdl
  104.         else:
  105.             other_make_and_model = '%s %s' % (other.mfg, other.mdl)
  106.         (other_mfg, other_mdl) = cupshelpers.ppds.ppdMakeModelSplit(other_make_and_model)
  107.         mfgcmp = cmp(our_mfg.lower(), other_mfg.lower())
  108.         if mfgcmp != 0:
  109.             return mfgcmp
  110.         mdlcmp = cmp(our_mdl.lower(), other_mdl.lower())
  111.         if mdlcmp != 0:
  112.             return mdlcmp
  113.         if self.sn == '' or other.sn == '':
  114.             return 0
  115.         return cmp(self.sn, other.sn)
  116.  
  117.  
  118. if __name__ == '__main__':
  119.     import authconn
  120.     c = authconn.Connection()
  121.     devices = cupshelpers.getDevices(c)
  122.     physicaldevices = []
  123.     for device in devices.values():
  124.         physicaldevice = PhysicalDevice(device)
  125.         
  126.         try:
  127.             i = physicaldevices.index(physicaldevice)
  128.             physicaldevices[i].add_device(device)
  129.         continue
  130.         except ValueError:
  131.             physicaldevices.append(physicaldevice)
  132.             continue
  133.         
  134.  
  135.     
  136.     physicaldevices.sort()
  137.     for physicaldevice in physicaldevices:
  138.         print physicaldevice.get_info()
  139.         devices = physicaldevice.get_devices()
  140.         for device in devices:
  141.             print ' ', device
  142.         
  143.     
  144.  
  145.